Cloud architectures are used in cloud computing and cloud storage systems for offering infrastructure-as-a-service (IaaS) cloud services. Examples of cloud architectures include the VMware vCloud Director® cloud architecture software, Amazon EC2™ web service, and OpenStack™ open source cloud computing service. IaaS cloud service is a type of cloud service that provides access to physical and/or virtual resources in a cloud environment. These services provide a tenant application programming interface (API) that supports operations for manipulating IaaS constructs, such as virtual machines (VMs) and logical networks.
Virtual machines running in host computers are actively managed to improve the overall performance of cloud services. One example is live migration of VMs from one cloud computing system to another cloud computing system. Live migration of a VM involves copying the memory pages of the VM from a source machine to a destination machine. VMs may undergo live cross-cloud migration from a busy server to an underutilized server to achieve load balancing across cloud computing systems. Live migration of VMs also may be carried out to enable machine maintenance.
Cross-cloud migration of VMs and other data is usually performed across a wide-area network (WAN), such as the Internet. To improve latency and throughput over the WAN, WAN optimizers are employed. On the sending side, WAN optimizers compress data and on the receiving side WAN optimizers decompress the data. WAN optimizers also perform deduplication. Because of compression and deduplication, the WAN optimizer on the receiving side often deals with more data than the WAN optimizer on the sending side. This can cause the data buffer of the receiving WAN optimizer to fill faster than the receiving WAN optimizer can free. When a receiving WAN optimizer's data buffer becomes full, it is not able to accept new data until it frees space in its buffer. During this time, no data is sent from the sending WAN optimizer to the receiving WAN optimizer. In addition, the WAN optimizer causes the buffering both on the local and remote side to exhibit a non-linearity in that a constant number of bytes in the buffers holds a variable number of data bytes at different points in time due to the compression and deduplication operations performed by the WAN optimizer. This non-linearity poses a problem for latency sensitive protocols.
Software performing cross-cloud migration of VMs or other data sometimes has a progress requirement to transfer a certain amount of data per unit of time. If the progress requirement is not met, then the migration software concludes that the migration cannot be completed at this time and aborts the migration process. When a receiving WAN optimizer's buffer fills and the WAN optimizer stops receiving data for a certain length of time, that length of time might be too long to satisfy the migrating software's progress requirement. This causes the migration to fail. Thus, there exists a need to control data flow from one cloud to another cloud, when utilizing WAN optimizers, to prevent aborts of data migration processes.